a = ['a', 1, 'b', 'c', 8]

print(a[1])

a[2] = 88
# 列表切片
print(a[1:])

# list将可迭代对象转为列表的函数
b = list(('a', 44, 'cc'))
print(b)
# 列表的添加
# 追加末尾
b.append(666)
print(b)
b.insert(1, 888)
print(b)
b.extend(a)
print(b)

# 删除remove pop clear
# pop 默认删除末尾一个元素，返回被删除的元素，可以带参数索引值删除
# remove 删除指定的元素，没有找到这个元素报错
b.pop()
print(b)
b.pop(len(b) - 1)
print(b)
b.remove('cc')
print(b)
# b.clear()
# print(b)

# index 查找，找不到报错
index = b.index('a')
print(index)
print(b.count('a'))
print(33 in b)

# 遍历
for e in b:
    print(e)

i = 0
while i < len(b):
    print(b[i])
    i += 1

c = [33, 5, 2, 100]
c.sort()
print(c)
c.reverse()
print(c)

'''
python数据保存在内存里，分可变和不可变类型
可变：列表、字典、集合    如果修改值，内存地址不会变化
不可变：字符串、数字、元组  如果修改值，内存地址会发生变化
'''
f = 10
h = f
print('修改前的内存地址f={},h={}'.format(id(f), id(h)))
f = 8
print(h)  # 10
print('修改后的内存地址f={},h={}'.format(id(f), id(h)))

list1 = [1, 2, 3]
list2 = list1
print('修改前的内存地址list1={},list2={}'.format(id(list1), id(list2)))
list1[0] = 4
print(list2)  # [4, 2, 3]
print('修改后的内存地址list1={},list2={}'.format(id(list1), id(list2)))

# 浅拷贝，内容拷贝，地址不一样
list3 = a.copy()

# copy模块浅拷贝
import copy

list4 = copy.copy(a)

# 切片浅拷贝
list5 = a[::]

print('list={},地址{};list3={},地址；list4={},地址{};list5={},地址{}'.format(a, id(a), list3, id(list3), list4, id(list4),
                                                                    list5, id(list5)))

# 深拷贝，列表的子列表内容也复制
list9 = [1, 2, [3, 4]]
list10 = list9.copy()
list11 = copy.deepcopy(list9)
list9[2][0] = 88

print('list9地址{}；list10={},地址{};list11={},地址{}'.format(id(list9), list10, id(list10), list11, id(list11)))

import random

# 列表的嵌套
teachers = ['a', 'b', 'c', 'd', 'e', 'f']
rooms = [[], [], []]
for teacher in teachers:
    room = random.choice(rooms)  # choice 从列表中随机选择一个子列表
    room.append(teacher)

# for..in.. 带索引遍历
for i, room in enumerate(rooms):
    print('房间{}共有{}位老师，分别是：'.format(i + 1, len(room)))
    for teacher in room:
        print(teacher, end='\t')
    print()

# 列表推导式

list6 = [i for i in range(3, 10)]
print(list6)

list7 = [i for i in range(90, 100) if i % 2]
print(list7)
# 列表的元素是元组
list8 = [(x, y) for x in range(15, 20) for y in range(25, 30)]
print(list8)

# 将[1...100]转成[[1,2,3],[4,5,6]...]
m = [i for i in range(1, 101)]
print(m)

n = [m[j:j + 3] for j in range(0, 100, 3)]
print(n)
